library(groundhog)
pkgs <-  c("tidyverse","here", "lmerTest", "sjPlot","broom.mixed", "kableExtra", "ggeffects", "gt", "brms", "bayestestR","ggdist", "pheatmap", "heatmaply","pheatmap","gplots","RColorBrewer", "tm", "wordcloud", "psych")
groundhog.day <- '2022-07-25'
groundhog.library(pkgs, groundhog.day)
The package 'tidyverse_1.3.2' is already attached.
The package 'here_1.0.1' is already attached.
The package 'lmerTest_3.1-3' is already attached.
The package 'sjPlot_2.8.10' is already attached.
The package 'broom.mixed_0.2.9.4' is already attached.
The package 'kableExtra_1.3.4' is already attached.
The package 'ggeffects_1.1.2' is already attached.
The package 'gt_0.6.0' is already attached.
The package 'brms_2.17.0' is already attached.
The package 'bayestestR_0.12.1' is already attached.
The package 'ggdist_3.2.0' is already attached.
The package 'pheatmap_1.0.12' is already attached.
The package 'heatmaply_1.3.0' is already attached.
The package 'pheatmap_1.0.12' is already attached.
The package 'gplots_3.1.3' is already attached.
The package 'RColorBrewer_1.1-3' is already attached.
The package 'tm_0.7-8' is already attached.
The package 'wordcloud_2.6' is already attached.
The package 'psych_2.2.5' is already attached.
here::i_am("Analysis/idmPrelimAnal.Rmd")
here() starts at /Users/jacobelder/Documents/GitHub/EpMemNet
devtools::source_url("https://raw.githubusercontent.com/JacobElder/MiscellaneousR/master/corToOne.R")
devtools::source_url("https://raw.githubusercontent.com/JacobElder/MiscellaneousR/master/plotCommAxes.R")
devtools::source_url("https://raw.githubusercontent.com/JacobElder/MiscellaneousR/master/named.effects.ref.R")
fullLong <- arrow::read_parquet(here("Data", "longEpMNet.parquet"))
fullShort <- arrow::read_parquet(here("Data","shortEpMNet.parquet"))
fullLong$subID <- as.numeric(fullLong$subID)
fullData <- fullLong %>% full_join(fullShort, by = c("subID"))

Descriptives

# How many people listed 0 connections?
nrow(fullShort[which(fullShort$edgeTot==0),])

#describe(fullLong$strength)

Wordcloud

#Create a vector containing only the text
text <- as.vector(fullData$memory)
# Create a corpus  
docs <- Corpus(VectorSource(text))
docs <- docs %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeWords, stopwords("english"))
docs <- tm_map(docs, removeWords, c("the","and"))

dtm <- TermDocumentMatrix(docs) 
matrix <- as.matrix(dtm) 
words <- sort(rowSums(matrix),decreasing=TRUE) 
df <- data.frame(word = names(words),freq=words)

set.seed(24)
wordcloud(words = df$word, freq = df$freq, min.freq = 1,           max.words=200, random.order=FALSE, rot.per=0.35,            colors=brewer.pal(8, "Dark2"))

Sanity Checks

Does time predict number of causes?

Yes, the farther away in time, the more experiences something causes.

m<-glmer(outdegree ~  scale(length) + numID + ( scale(length) | subID), data=fullData,family="poisson")
summary(m)

Does time predict causes of experience?

Yes, the farther back in time, the fewer experiences cause something.

m<-glmer(indegree ~  scale(length) + numID + ( scale(length) | subID), data=fullData,family="poisson")
summary(m)

H1: People will evaluate more positively, less negatively (i.e., more favorably) on memories with more downstram dependents.

Valence Self-Report

More positive and negative, experience causes more experience

More positive, experience is caused by more experiences

summary(m)
Generalized linear mixed model fit by maximum likelihood (Laplace
  Approximation) [glmerMod]
 Family: poisson  ( log )
Formula: 
indegree ~ scale(positive) * scale(negative) + numID + (scale(positive) +  
    scale(negative) | subID)
   Data: fullData

     AIC      BIC   logLik deviance df.resid 
  5027.8   5085.5  -2502.9   5005.8     1393 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.3843 -0.6552 -0.1208  0.2958  8.3101 

Random effects:
 Groups Name            Variance Std.Dev. Corr     
 subID  (Intercept)     0.235059 0.48483           
        scale(positive) 0.003621 0.06017  0.04     
        scale(negative) 0.060790 0.24656  0.19 0.98
Number of obs: 1404, groups:  subID, 204

Fixed effects:
                                 Estimate Std. Error z value Pr(>|z|)    
(Intercept)                     -0.094788   0.082784  -1.145  0.25220    
scale(positive)                  0.126108   0.038491   3.276  0.00105 ** 
scale(negative)                  0.069826   0.049892   1.400  0.16165    
numID                            0.035238   0.004767   7.391 1.45e-13 ***
scale(positive):scale(negative)  0.046105   0.025669   1.796  0.07248 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(p) scl(n) numID 
scale(pstv)  0.105                     
scale(ngtv)  0.195  0.640              
numID       -0.780  0.023  0.020       
scl(pst):()  0.174 -0.182  0.143  0.005
optimizer (Nelder_Mead) convergence code: 0 (OK)
Model failed to converge with max|grad| = 0.0979906 (tol = 0.002, component 1)

PANAS

Outdegree

More positive and more negative, experience causes more experiences

m<-glmer(outdegree ~  scale(PANAS_P) + scale(PANAS_N) + numID + ( scale(PANAS_P) + scale(PANAS_N) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_1) + numID + ( scale(PANAS_1) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_2) + numID + ( scale(PANAS_2) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_3) + numID + ( scale(PANAS_3) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_4) + numID + ( scale(PANAS_4) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_5) + numID + ( scale(PANAS_5) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_6) + numID + ( scale(PANAS_6) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_7) + numID + ( scale(PANAS_7) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_8) + numID + ( scale(PANAS_8) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_9) + numID + ( scale(PANAS_9) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(outdegree ~  scale(PANAS_10) + numID + ( scale(PANAS_10) | subID), data=fullData,family="poisson")
summary(m)

Indegree

More positive, more experiences cause an experience

m<-glmer(indegree ~  scale(PANAS_P) + scale(PANAS_N) + numID + ( scale(PANAS_P) + scale(PANAS_N) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_1) + numID + ( scale(PANAS_1) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_2) + numID + ( scale(PANAS_2) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_3) + numID + ( scale(PANAS_3) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_4) + numID + ( scale(PANAS_4) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_5) + numID + ( scale(PANAS_5) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_6) + numID + ( scale(PANAS_6) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_7) + numID + ( scale(PANAS_7) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_8) + numID + ( scale(PANAS_8) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_9) + numID + ( scale(PANAS_9) | subID), data=fullData,family="poisson")
summary(m)

m<-glmer(indegree ~  scale(PANAS_10) + numID + ( scale(PANAS_10) | subID), data=fullData,family="poisson")
summary(m)

H2: People will be more certain in memories with more downstream dependents.

Causing more experiences and being caused by more experiences is associated with greater certainty in experience, but causing is a stronger effect.

Using strength/similarity is stronger effect.

m<-lmer(scale(Cert) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer(scale(Cert) ~  scale(strengthIn) + scale(strengthOut) + ( scale(strengthIn) + scale(strengthOut) | subID), data=fullData)
summary(m)

H3: Memories with more dependents will be more clearly defined and accessible.

Experiences causing more experiences are more predictive of clarity than experiences caused by more experiences

m<-lmer( scale(Clear) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(Clear) ~  scale(strengthIn) + scale(strengthOut) + numID + scale(length) + ( scale(strengthIn) + scale(strengthOut) | subID), data=fullData)
summary(m)

H5: Memories with more dependents will be more fundamental to how people see themselves, and if they were changed, would change the person.

The number of an experiences of causes, but not what it is caused by, predict how fundamental an experience is.

m<-lmer( scale(Fund) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(Fund) ~  scale(strengthIn) + scale(strengthOut) + numID + scale(length) + ( scale(strengthIn) + scale(strengthOut) | subID), data=fullData)
summary(m)

Important principal factor (Changed me, Fundamental, Representative)

m<-lmer(scale(PCAimp) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer(scale(PCAimp) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

H6: Memories with more dependents will be more important to the person.

To Self

Experiences that cause more experiences are perceived as important to self, but not experiences that are caused by more experiences.

m<-lmer( scale(IM) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(IM) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

To Others

Experiences that cause more experiences are perceived as important to others, but not experiences that are caused by more experiences.

m<-lmer( scale(IO) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(IO) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

More Important to Self than Others

No evidence

fullData$ImpDiff <- (fullData$IM-fullData$IO)
m<-lmer( scale(ImpDiff) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

m<-lmer( scale(ImpDiff) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

H11: People think more often about memories with more memories causing them.

Experiences with more causes and caused by more are reflected on more frequently. Perhaps some stronger effects for causing more.

m<-lmer( scale(Often) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(Often) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

H12: The more memories that depend on a given memory, the more people believe “This memory changed me”. Weaker effect for memories with many causes of it.

m<-lmer( scale(Chan) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(Chan) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

H13: The more memories that depend on a given memory, the more certain that people feel this experience is representative of who they are.

People feel experiences with more causes are more representative. Similar, but weaker, effect for experiences caused by more experiences.

m<-lmer( scale(Rep) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(Rep) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

Exploratory Analyses

Sentiment of memory description will be associated with dependencies

Combined

Experiences caused by more experiences have more qualitative positive sentiment.

m<-lmer( scale(vad_comp) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(vad_comp) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

Positive

Experiences with more experiences causing them are qualitatively more positive

m<-lmer( scale(vad_pos) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(vad_pos) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

Negative

No negative effects

m<-lmer( scale(vad_neg) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)

m<-lmer( scale(vad_neg) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)

Number of words

No effect of causes or caused by on number of words

summary(m)
Generalized linear mixed model fit by maximum likelihood (Laplace
  Approximation) [glmerMod]
 Family: poisson  ( log )
Formula: nwords ~ outdegree + indegree + numID + scale(length) + (outdegree +  
    indegree | subID)
   Data: fullData

     AIC      BIC   logLik deviance df.resid 
 12504.6  12567.3  -6241.3  12482.6     2204 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-6.3076 -0.7071 -0.1331  0.5397 12.0926 

Random effects:
 Groups Name        Variance Std.Dev. Corr       
 subID  (Intercept) 0.568425 0.75394             
        outdegree   0.002340 0.04838   0.12      
        indegree    0.002723 0.05218  -0.38  0.26
Number of obs: 2215, groups:  subID, 215

Fixed effects:
                Estimate Std. Error z value Pr(>|z|)    
(Intercept)    1.9334800  0.0811461  23.827   <2e-16 ***
outdegree     -0.0123978  0.0077872  -1.592    0.111    
indegree      -0.0005592  0.0090943  -0.061    0.951    
numID          0.0006189  0.0056419   0.110    0.913    
scale(length)  0.0862643  0.0097761   8.824   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) outdgr indegr numID 
outdegree   -0.099                     
indegree    -0.081  0.116              
numID       -0.738  0.044 -0.178       
scal(lngth) -0.034 -0.047  0.085  0.014

Breadth

Experiences with more causes are more broad.

m<-lmer( scale(Breadth) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: scale(Breadth) ~ scale(outdegree) + scale(indegree) + numID +  
    scale(length) + (scale(outdegree) + scale(indegree) | subID)
   Data: fullData

REML criterion at convergence: 5255.5

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.38126 -0.64650 -0.00537  0.65203  2.99689 

Random effects:
 Groups   Name             Variance Std.Dev. Corr       
 subID    (Intercept)      0.254937 0.50491             
          scale(outdegree) 0.033977 0.18433  -0.08      
          scale(indegree)  0.001751 0.04185  -0.01  0.94
 Residual                  0.703320 0.83864             
Number of obs: 1975, groups:  subID, 209

Fixed effects:
                   Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)       2.435e-01  7.291e-02  2.532e+02   3.339 0.000967 ***
scale(outdegree)  9.815e-02  3.180e-02  5.899e+01   3.086 0.003086 ** 
scale(indegree)  -2.257e-02  2.359e-02  4.733e+00  -0.957 0.385073    
numID            -1.430e-02  4.654e-03  1.716e+02  -3.072 0.002472 ** 
scale(length)     4.908e-02  2.276e-02  1.916e+03   2.157 0.031163 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(t) scl(n) numID 
scale(tdgr)  0.224                     
scale(ndgr)  0.144  0.113              
numID       -0.800 -0.187 -0.114       
scal(lngth) -0.086 -0.075  0.134  0.051
m<-lmer( scale(Breadth) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
boundary (singular) fit: see help('isSingular')
Warning: Model failed to converge with 1 negative eigenvalue: -1.6e+03
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: scale(Breadth) ~ scale(strengthOut) + scale(strengthIn) + numID +  
    scale(length) + (scale(strengthOut) + scale(strengthIn) |      subID)
   Data: fullData

REML criterion at convergence: 5276

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.3666 -0.6810 -0.0020  0.6681  3.1794 

Random effects:
 Groups   Name               Variance  Std.Dev. Corr     
 subID    (Intercept)        0.2663596 0.51610           
          scale(strengthOut) 0.0004799 0.02191  1.00     
          scale(strengthIn)  0.0055609 0.07457  0.24 0.24
 Residual                    0.7270389 0.85267           
Number of obs: 1975, groups:  subID, 209

Fixed effects:
                     Estimate Std. Error         df t value Pr(>|t|)   
(Intercept)         2.239e-01  7.090e-02  2.030e+02   3.158  0.00183 **
scale(strengthOut)  6.527e-02  2.299e-02  4.132e+02   2.840  0.00474 **
scale(strengthIn)   7.710e-03  2.789e-02  2.932e+00   0.276  0.80054   
numID              -1.265e-02  4.571e-03  1.580e+02  -2.767  0.00633 **
scale(length)       6.804e-02  2.257e-02  1.890e+03   3.015  0.00261 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(O) scl(I) numID 
scl(strngO)  0.125                     
scl(strngI)  0.135 -0.107              
numID       -0.782 -0.044 -0.060       
scal(lngth) -0.064 -0.036  0.152  0.030
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')

Distinctness

Experiences with more causes are perceived as more distinct/different.

m<-lmer( scale(Dist) ~  scale(outdegree) + scale(indegree) + numID + scale(length) + ( scale(outdegree) + scale(indegree) | subID), data=fullData)
boundary (singular) fit: see help('isSingular')
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: 
scale(Dist) ~ scale(outdegree) + scale(indegree) + numID + scale(length) +  
    (scale(outdegree) + scale(indegree) | subID)
   Data: fullData

REML criterion at convergence: 5135.8

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.9072 -0.5359  0.1170  0.6383  2.6875 

Random effects:
 Groups   Name             Variance  Std.Dev. Corr       
 subID    (Intercept)      0.2933625 0.54163             
          scale(outdegree) 0.0256675 0.16021  -0.38      
          scale(indegree)  0.0002987 0.01728  -0.55 -0.56
 Residual                  0.6454951 0.80343             
Number of obs: 1985, groups:  subID, 209

Fixed effects:
                   Estimate Std. Error         df t value Pr(>|t|)   
(Intercept)       1.726e-01  7.529e-02  2.591e+02   2.292  0.02270 * 
scale(outdegree)  8.732e-02  2.912e-02  8.263e+01   2.999  0.00358 **
scale(indegree)   3.735e-02  2.118e-02  6.440e+02   1.763  0.07837 . 
numID            -9.835e-03  4.891e-03  1.879e+02  -2.011  0.04577 * 
scale(length)    -8.188e-04  2.192e-02  1.945e+03  -0.037  0.97020   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(t) scl(n) numID 
scale(tdgr)  0.189                     
scale(ndgr)  0.117 -0.125              
numID       -0.806 -0.264 -0.151       
scal(lngth) -0.087 -0.081  0.142  0.056
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
m<-lmer( scale(Dist) ~  scale(strengthOut) + scale(strengthIn) + numID + scale(length) + ( scale(strengthOut) + scale(strengthIn) | subID), data=fullData)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: scale(Dist) ~ scale(strengthOut) + scale(strengthIn) + numID +  
    scale(length) + (scale(strengthOut) + scale(strengthIn) |      subID)
   Data: fullData

REML criterion at convergence: 5121.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.8859 -0.5442  0.1147  0.6225  2.6721 

Random effects:
 Groups   Name               Variance Std.Dev. Corr       
 subID    (Intercept)        0.291166 0.53960             
          scale(strengthOut) 0.019970 0.14132  -0.53      
          scale(strengthIn)  0.003752 0.06126   0.02  0.22
 Residual                    0.641282 0.80080             
Number of obs: 1985, groups:  subID, 209

Fixed effects:
                     Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)         1.969e-01  7.513e-02  2.660e+02   2.621  0.00927 ** 
scale(strengthOut)  1.358e-01  2.827e-02  5.135e+01   4.804 1.39e-05 ***
scale(strengthIn)   1.568e-02  2.575e-02  1.906e+01   0.609  0.54975    
numID              -1.147e-02  4.844e-03  1.927e+02  -2.367  0.01894 *  
scale(length)      -6.898e-04  2.178e-02  1.930e+03  -0.032  0.97474    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(O) scl(I) numID 
scl(strngO)  0.207                     
scl(strngI)  0.120 -0.078              
numID       -0.805 -0.319 -0.085       
scal(lngth) -0.079 -0.063  0.139  0.050

Do people higher in self-esteem have more self than other focused memories?

fullData$SminO <- fullData$SO_1 - fullData$SO_2

m<-lmer( SminO ~ SE + ( 1 | subID), data=fullData)
summary(m)

Page Rank, Hub and Changeability

m<-lmer(Chan ~  page + ( page | subID), data=fullData)
Warning: Model failed to converge with max|grad| = 0.00201605 (tol = 0.002, component 1)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: Chan ~ page + (page | subID)
   Data: fullData

REML criterion at convergence: 7451.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.5506 -0.5188  0.1435  0.6380  2.4692 

Random effects:
 Groups   Name        Variance Std.Dev. Corr 
 subID    (Intercept) 0.7239   0.8508        
          page        2.8202   1.6794   -0.37
 Residual             1.8739   1.3689        
Number of obs: 2067, groups:  subID, 211

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   5.28397    0.09343 139.75154  56.555   <2e-16 ***
page          0.53139    0.39896 155.86021   1.332    0.185    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
     (Intr)
page -0.686
optimizer (nloptwrap) convergence code: 0 (OK)
Model failed to converge with max|grad| = 0.00201605 (tol = 0.002, component 1)
m<-lmer(Chan ~  pageW + ( pageW | subID), data=fullData)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: Chan ~ pageW + (pageW | subID)
   Data: fullData

REML criterion at convergence: 7450

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.5729 -0.5228  0.1492  0.6423  2.4633 

Random effects:
 Groups   Name        Variance Std.Dev. Corr 
 subID    (Intercept) 0.7045   0.8393        
          pageW       2.1633   1.4708   -0.31
 Residual             1.8739   1.3689        
Number of obs: 2067, groups:  subID, 211

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   5.25817    0.09159 146.51342   57.41   <2e-16 ***
pageW         0.68403    0.38436 163.86429    1.78    0.077 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
      (Intr)
pageW -0.669
m<-lmer(Chan ~  pageOut + ( pageOut | subID), data=fullData)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: Chan ~ pageOut + (pageOut | subID)
   Data: fullData

REML criterion at convergence: 7423

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.5889 -0.5275  0.1288  0.6339  2.2266 

Random effects:
 Groups   Name        Variance Std.Dev. Corr 
 subID    (Intercept) 0.9007   0.949         
          pageOut     5.2869   2.299    -0.70
 Residual             1.8388   1.356         
Number of obs: 2067, groups:  subID, 211

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   5.18192    0.09275 168.21829  55.872  < 2e-16 ***
pageOut       1.32770    0.34736 165.28688   3.822 0.000187 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
        (Intr)
pageOut -0.705
m<-lmer(Chan ~  pageOutW + ( pageOutW | subID), data=fullData)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: Chan ~ pageOutW + (pageOutW | subID)
   Data: fullData

REML criterion at convergence: 7424.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.5684 -0.5271  0.1284  0.6323  2.2400 

Random effects:
 Groups   Name        Variance Std.Dev. Corr 
 subID    (Intercept) 0.8643   0.9297        
          pageOutW    4.8983   2.2132   -0.65
 Residual             1.8400   1.3565        
Number of obs: 2067, groups:  subID, 211

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   5.16388    0.09199 168.14558  56.134  < 2e-16 ***
pageOutW      1.40907    0.35061 164.58161   4.019 8.88e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
         (Intr)
pageOutW -0.692
m<-lmer(Chan ~  hub + ( hub | subID), data=fullData)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: Chan ~ hub + (hub | subID)
   Data: fullData

REML criterion at convergence: 7374.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.6191 -0.5154  0.1350  0.6102  2.6256 

Random effects:
 Groups   Name        Variance Std.Dev. Corr 
 subID    (Intercept) 0.8484   0.9211        
          hub         0.6631   0.8143   -0.56
 Residual             1.7554   1.3249        
Number of obs: 2067, groups:  subID, 211

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   5.14426    0.08313 180.94385  61.881  < 2e-16 ***
hub           0.63695    0.10737 199.75811   5.932  1.3e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
    (Intr)
hub -0.601
m<-lmer(Chan ~  hubW + ( hubW | subID), data=fullData)
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: Chan ~ hubW + (hubW | subID)
   Data: fullData

REML criterion at convergence: 7370.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.6127 -0.5366  0.1385  0.6163  2.6130 

Random effects:
 Groups   Name        Variance Std.Dev. Corr 
 subID    (Intercept) 0.8089   0.8994        
          hubW        0.5306   0.7284   -0.53
 Residual             1.7619   1.3274        
Number of obs: 2067, groups:  subID, 211

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   5.15300    0.07975 188.71394  64.614  < 2e-16 ***
hubW          0.69360    0.10529 232.85966   6.588 2.95e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
     (Intr)
hubW -0.548
fullShort <- do.call(data.frame,                      # Replace Inf in data by NA
                   lapply(fullShort,
                          function(x) replace(x, is.infinite(x), NA)))
corMat <- fullShort %>% select(edgeTot:NFC) %>% cor(fullShort,use="pairwise.complete.obs")

outphm <- pheatmap(corMat, fontsize_row = 6, fontsize_col = 6, angle_col = 45, angle_row =45, width=100, height = 200 )


heatmaply_cor(round(corMat,3), Rowv=outphm[[1]], Colv=outphm[[2]], revC=TRUE, fontsize_row = 2.5, fontsize_col = 2.5, angle_col = 45, angle_row =45,  limits = c(-1, 1), colors = colorRampPalette(rev(brewer.pal(n = 7, name =
  "RdYlBu")))(100) )
fullShort %>% select(vad_compAg, MAIA:NFC) %>% corToOne(., "vad_compAg")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(referenceVar)` instead of `referenceVar` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.
fullShort %>% select(vad_compAg, MAIA:NFC) %>% plotCorToOne(., "vad_compAg")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(edgeTot, MAIA:NFC) %>% corToOne(., "edgeTot")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(edgeTot, MAIA:NFC) %>% plotCorToOne(., "edgeTot")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(numID, MAIA:NFC) %>% corToOne(., "numID")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(numID, MAIA:NFC) %>% plotCorToOne(., "numID")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(dense, MAIA:NFC) %>% corToOne(., "dense")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(dense, MAIA:NFC) %>% plotCorToOne(., "dense")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(aveDist, MAIA:NFC) %>% corToOne(., "aveDist")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(aveDist, MAIA:NFC) %>% plotCorToOne(., "aveDist")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(Val_1_Homoph, MAIA:NFC) %>% corToOne(., "Val_1_Homoph")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(Val_1_Homoph, MAIA:NFC) %>% plotCorToOne(., "Val_1_Homoph")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(Val_2_Homoph, MAIA:NFC) %>% corToOne(., "Val_2_Homoph")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(Val_2_Homoph, MAIA:NFC) %>% plotCorToOne(., "Val_2_Homoph")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(Fund_Homoph, MAIA:NFC) %>% corToOne(., "Fund_Homoph")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(Fund_Homoph, MAIA:NFC) %>% plotCorToOne(., "Fund_Homoph")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(Rep_Homoph, MAIA:NFC) %>% corToOne(., "Rep_Homoph")
fullShort %>% select(Rep_Homoph, MAIA:NFC) %>% plotCorToOne(., "Rep_Homoph")
summary(m)
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: PminN ~ CESD * outdegree + (1 | subID)
   Data: fullData

REML criterion at convergence: 15416.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.5919 -0.5456  0.1928  0.7810  1.9627 

Random effects:
 Groups   Name        Variance Std.Dev.
 subID    (Intercept)  377.3   19.43   
 Residual             3362.7   57.99   
Number of obs: 1399, groups:  subID, 202

Fixed effects:
               Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)      47.371     11.856  331.376   3.996 7.95e-05 ***
CESD             -8.022      5.160  329.247  -1.554  0.12103    
outdegree        10.696      3.709 1362.306   2.884  0.00399 ** 
CESD:outdegree   -4.841      1.611 1356.346  -3.006  0.00270 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) CESD   outdgr
CESD        -0.974              
outdegree   -0.524  0.512       
CESD:outdgr  0.513 -0.527 -0.977
fullShort %>% select(recip, MAIA:NFC) %>% corToOne(., "recip")
fullShort %>% select(recip, MAIA:NFC) %>% plotCorToOne(., "recip")

Cohesive

fullShort %>% select(cohes, MAIA:NFC) %>% corToOne(., "cohes")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(cohes, MAIA:NFC) %>% plotCorToOne(., "cohes")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(modular, MAIA:NFC) %>% corToOne(., "modular")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(modular, MAIA:NFC) %>% plotCorToOne(., "modular")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

Reciprocity

fullShort %>% select(recip, MAIA:NFC) %>% corToOne(., "recip")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(recip, MAIA:NFC) %>% plotCorToOne(., "recip")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

Standard Deviation of Degrees

fullShort %>% select(sdDeg, MAIA:NFC) %>% corToOne(., "sdDeg")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(sdDeg, MAIA:NFC) %>% plotCorToOne(., "sdDeg")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

fullShort %>% select(sdDegW, MAIA:NFC) %>% corToOne(., "sdDegW")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'
fullShort %>% select(sdDegW, MAIA:NFC) %>% plotCorToOne(., "sdDegW")
[1] "All required packages attached"

Correlation method: 'pearson'
Missing treated using: 'pairwise.complete.obs'

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7cn0KbGlicmFyeShncm91bmRob2cpCnBrZ3MgPC0gIGMoInRpZHl2ZXJzZSIsImhlcmUiLCAibG1lclRlc3QiLCAic2pQbG90IiwiYnJvb20ubWl4ZWQiLCAia2FibGVFeHRyYSIsICJnZ2VmZmVjdHMiLCAiZ3QiLCAiYnJtcyIsICJiYXllc3Rlc3RSIiwiZ2dkaXN0IiwgInBoZWF0bWFwIiwgImhlYXRtYXBseSIsInBoZWF0bWFwIiwiZ3Bsb3RzIiwiUkNvbG9yQnJld2VyIiwgInRtIiwgIndvcmRjbG91ZCIsICJwc3ljaCIpCmdyb3VuZGhvZy5kYXkgPC0gJzIwMjItMDctMjUnCmdyb3VuZGhvZy5saWJyYXJ5KHBrZ3MsIGdyb3VuZGhvZy5kYXkpCmhlcmU6OmlfYW0oIkFuYWx5c2lzL2lkbVByZWxpbUFuYWwuUm1kIikKYGBgCgpgYGB7cn0KZGV2dG9vbHM6OnNvdXJjZV91cmwoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9KYWNvYkVsZGVyL01pc2NlbGxhbmVvdXNSL21hc3Rlci9jb3JUb09uZS5SIikKZGV2dG9vbHM6OnNvdXJjZV91cmwoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9KYWNvYkVsZGVyL01pc2NlbGxhbmVvdXNSL21hc3Rlci9wbG90Q29tbUF4ZXMuUiIpCmRldnRvb2xzOjpzb3VyY2VfdXJsKCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vSmFjb2JFbGRlci9NaXNjZWxsYW5lb3VzUi9tYXN0ZXIvbmFtZWQuZWZmZWN0cy5yZWYuUiIpCmBgYAoKCmBgYHtyfQpmdWxsTG9uZyA8LSBhcnJvdzo6cmVhZF9wYXJxdWV0KGhlcmUoIkRhdGEiLCAibG9uZ0VwTU5ldC5wYXJxdWV0IikpCmZ1bGxTaG9ydCA8LSBhcnJvdzo6cmVhZF9wYXJxdWV0KGhlcmUoIkRhdGEiLCJzaG9ydEVwTU5ldC5wYXJxdWV0IikpCmZ1bGxMb25nJHN1YklEIDwtIGFzLm51bWVyaWMoZnVsbExvbmckc3ViSUQpCmZ1bGxEYXRhIDwtIGZ1bGxMb25nICU+JSBmdWxsX2pvaW4oZnVsbFNob3J0LCBieSA9IGMoInN1YklEIikpCmBgYAoKIyBEZXNjcmlwdGl2ZXMKCmBgYHtyfQojIEhvdyBtYW55IHBlb3BsZSBsaXN0ZWQgMCBjb25uZWN0aW9ucz8KbnJvdyhmdWxsU2hvcnRbd2hpY2goZnVsbFNob3J0JGVkZ2VUb3Q9PTApLF0pCgojZGVzY3JpYmUoZnVsbExvbmckc3RyZW5ndGgpCmBgYAoKIyBXb3JkY2xvdWQKCmBgYHtyfQojQ3JlYXRlIGEgdmVjdG9yIGNvbnRhaW5pbmcgb25seSB0aGUgdGV4dAp0ZXh0IDwtIGFzLnZlY3RvcihmdWxsRGF0YSRtZW1vcnkpCiMgQ3JlYXRlIGEgY29ycHVzICAKZG9jcyA8LSBDb3JwdXMoVmVjdG9yU291cmNlKHRleHQpKQpkb2NzIDwtIGRvY3MgJT4lCiAgdG1fbWFwKHJlbW92ZU51bWJlcnMpICU+JQogIHRtX21hcChyZW1vdmVQdW5jdHVhdGlvbikgJT4lCiAgdG1fbWFwKHN0cmlwV2hpdGVzcGFjZSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKZG9jcyA8LSB0bV9tYXAoZG9jcywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nbGlzaCIpKQpkb2NzIDwtIHRtX21hcChkb2NzLCByZW1vdmVXb3JkcywgYygidGhlIiwiYW5kIikpCgpkdG0gPC0gVGVybURvY3VtZW50TWF0cml4KGRvY3MpIAptYXRyaXggPC0gYXMubWF0cml4KGR0bSkgCndvcmRzIDwtIHNvcnQocm93U3VtcyhtYXRyaXgpLGRlY3JlYXNpbmc9VFJVRSkgCmRmIDwtIGRhdGEuZnJhbWUod29yZCA9IG5hbWVzKHdvcmRzKSxmcmVxPXdvcmRzKQoKc2V0LnNlZWQoMjQpCndvcmRjbG91ZCh3b3JkcyA9IGRmJHdvcmQsIGZyZXEgPSBkZiRmcmVxLCBtaW4uZnJlcSA9IDEsICAgICAgICAgICBtYXgud29yZHM9MjAwLCByYW5kb20ub3JkZXI9RkFMU0UsIHJvdC5wZXI9MC4zNSwgICAgICAgICAgICBjb2xvcnM9YnJld2VyLnBhbCg4LCAiRGFyazIiKSkKYGBgCgojIFNhbml0eSBDaGVja3MKCiMjIERvZXMgdGltZSBwcmVkaWN0IG51bWJlciBvZiBjYXVzZXM/CgpZZXMsIHRoZSBmYXJ0aGVyIGF3YXkgaW4gdGltZSwgdGhlIG1vcmUgZXhwZXJpZW5jZXMgc29tZXRoaW5nIGNhdXNlcy4KCmBgYHtyfQptPC1nbG1lcihvdXRkZWdyZWUgfiAgc2NhbGUobGVuZ3RoKSArIG51bUlEICsgKCBzY2FsZShsZW5ndGgpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhLGZhbWlseT0icG9pc3NvbiIpCnN1bW1hcnkobSkKYGBgCgojIyBEb2VzIHRpbWUgcHJlZGljdCBjYXVzZXMgb2YgZXhwZXJpZW5jZT8KClllcywgdGhlIGZhcnRoZXIgYmFjayBpbiB0aW1lLCB0aGUgZmV3ZXIgZXhwZXJpZW5jZXMgY2F1c2Ugc29tZXRoaW5nLgoKYGBge3J9Cm08LWdsbWVyKGluZGVncmVlIH4gIHNjYWxlKGxlbmd0aCkgKyBudW1JRCArICggc2NhbGUobGVuZ3RoKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCmBgYAoKIyBIMTogUGVvcGxlIHdpbGwgZXZhbHVhdGUgbW9yZSBwb3NpdGl2ZWx5LCBsZXNzIG5lZ2F0aXZlbHkgKGkuZS4sIG1vcmUgZmF2b3JhYmx5KSBvbiBtZW1vcmllcyB3aXRoIG1vcmUgZG93bnN0cmFtIGRlcGVuZGVudHMuCgojIyBWYWxlbmNlIFNlbGYtUmVwb3J0CgpNb3JlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSwgZXhwZXJpZW5jZSBjYXVzZXMgbW9yZSBleHBlcmllbmNlCgpNb3JlIHBvc2l0aXZlLCBleHBlcmllbmNlIGlzIGNhdXNlZCBieSBtb3JlIGV4cGVyaWVuY2VzCgpgYGB7cn0KbTwtZ2xtZXIob3V0ZGVncmVlIH4gIHNjYWxlKHBvc2l0aXZlKSArIHNjYWxlKG5lZ2F0aXZlKSArIG51bUlEICsgKCBzY2FsZShwb3NpdGl2ZSkgKyBzY2FsZShuZWdhdGl2ZSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEsZmFtaWx5PSJwb2lzc29uIikKc3VtbWFyeShtKQoKbTwtZ2xtZXIoaW5kZWdyZWUgfiAgc2NhbGUocG9zaXRpdmUpICsgc2NhbGUobmVnYXRpdmUpICsgbnVtSUQgKyAoIHNjYWxlKHBvc2l0aXZlKSArIHNjYWxlKG5lZ2F0aXZlKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1sbWVyKHBvc2l0aXZlIH4gIG91dGRlZ3JlZSArIGluZGVncmVlICsgbnVtSUQgKyAoIG91dGRlZ3JlZSArIGluZGVncmVlIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCgptPC1sbWVyKG5lZ2F0aXZlIH4gIG91dGRlZ3JlZSArIGluZGVncmVlICsgbnVtSUQgKyAoIG91dGRlZ3JlZSArIGluZGVncmVlIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCmBgYAoKIyMgUEFOQVMKCiMjIyBPdXRkZWdyZWUKCk1vcmUgcG9zaXRpdmUgYW5kIG1vcmUgbmVnYXRpdmUsIGV4cGVyaWVuY2UgY2F1c2VzIG1vcmUgZXhwZXJpZW5jZXMKCmBgYHtyfQptPC1nbG1lcihvdXRkZWdyZWUgfiAgc2NhbGUoUEFOQVNfUCkgKyBzY2FsZShQQU5BU19OKSArIG51bUlEICsgKCBzY2FsZShQQU5BU19QKSArIHNjYWxlKFBBTkFTX04pIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhLGZhbWlseT0icG9pc3NvbiIpCnN1bW1hcnkobSkKCm08LWdsbWVyKG91dGRlZ3JlZSB+ICBzY2FsZShQQU5BU18xKSArIG51bUlEICsgKCBzY2FsZShQQU5BU18xKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihvdXRkZWdyZWUgfiAgc2NhbGUoUEFOQVNfMikgKyBudW1JRCArICggc2NhbGUoUEFOQVNfMikgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEsZmFtaWx5PSJwb2lzc29uIikKc3VtbWFyeShtKQoKbTwtZ2xtZXIob3V0ZGVncmVlIH4gIHNjYWxlKFBBTkFTXzMpICsgbnVtSUQgKyAoIHNjYWxlKFBBTkFTXzMpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhLGZhbWlseT0icG9pc3NvbiIpCnN1bW1hcnkobSkKCm08LWdsbWVyKG91dGRlZ3JlZSB+ICBzY2FsZShQQU5BU180KSArIG51bUlEICsgKCBzY2FsZShQQU5BU180KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihvdXRkZWdyZWUgfiAgc2NhbGUoUEFOQVNfNSkgKyBudW1JRCArICggc2NhbGUoUEFOQVNfNSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEsZmFtaWx5PSJwb2lzc29uIikKc3VtbWFyeShtKQoKbTwtZ2xtZXIob3V0ZGVncmVlIH4gIHNjYWxlKFBBTkFTXzYpICsgbnVtSUQgKyAoIHNjYWxlKFBBTkFTXzYpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhLGZhbWlseT0icG9pc3NvbiIpCnN1bW1hcnkobSkKCm08LWdsbWVyKG91dGRlZ3JlZSB+ICBzY2FsZShQQU5BU183KSArIG51bUlEICsgKCBzY2FsZShQQU5BU183KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihvdXRkZWdyZWUgfiAgc2NhbGUoUEFOQVNfOCkgKyBudW1JRCArICggc2NhbGUoUEFOQVNfOCkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEsZmFtaWx5PSJwb2lzc29uIikKc3VtbWFyeShtKQoKbTwtZ2xtZXIob3V0ZGVncmVlIH4gIHNjYWxlKFBBTkFTXzkpICsgbnVtSUQgKyAoIHNjYWxlKFBBTkFTXzkpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhLGZhbWlseT0icG9pc3NvbiIpCnN1bW1hcnkobSkKCm08LWdsbWVyKG91dGRlZ3JlZSB+ICBzY2FsZShQQU5BU18xMCkgKyBudW1JRCArICggc2NhbGUoUEFOQVNfMTApIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhLGZhbWlseT0icG9pc3NvbiIpCnN1bW1hcnkobSkKYGBgCgojIyMgSW5kZWdyZWUKCk1vcmUgcG9zaXRpdmUsIG1vcmUgZXhwZXJpZW5jZXMgY2F1c2UgYW4gZXhwZXJpZW5jZQoKYGBge3J9Cm08LWdsbWVyKGluZGVncmVlIH4gIHNjYWxlKFBBTkFTX1ApICsgc2NhbGUoUEFOQVNfTikgKyBudW1JRCArICggc2NhbGUoUEFOQVNfUCkgKyBzY2FsZShQQU5BU19OKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU18xKSArIG51bUlEICsgKCBzY2FsZShQQU5BU18xKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU18yKSArIG51bUlEICsgKCBzY2FsZShQQU5BU18yKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU18zKSArIG51bUlEICsgKCBzY2FsZShQQU5BU18zKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU180KSArIG51bUlEICsgKCBzY2FsZShQQU5BU180KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU181KSArIG51bUlEICsgKCBzY2FsZShQQU5BU181KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU182KSArIG51bUlEICsgKCBzY2FsZShQQU5BU182KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU183KSArIG51bUlEICsgKCBzY2FsZShQQU5BU183KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU184KSArIG51bUlEICsgKCBzY2FsZShQQU5BU184KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU185KSArIG51bUlEICsgKCBzY2FsZShQQU5BU185KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSxmYW1pbHk9InBvaXNzb24iKQpzdW1tYXJ5KG0pCgptPC1nbG1lcihpbmRlZ3JlZSB+ICBzY2FsZShQQU5BU18xMCkgKyBudW1JRCArICggc2NhbGUoUEFOQVNfMTApIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhLGZhbWlseT0icG9pc3NvbiIpCnN1bW1hcnkobSkKYGBgCgojIEgyOiBQZW9wbGUgd2lsbCBiZSBtb3JlIGNlcnRhaW4gaW4gbWVtb3JpZXMgd2l0aCBtb3JlIGRvd25zdHJlYW0gZGVwZW5kZW50cy4KCkNhdXNpbmcgbW9yZSBleHBlcmllbmNlcyBhbmQgYmVpbmcgY2F1c2VkIGJ5IG1vcmUgZXhwZXJpZW5jZXMgaXMgYXNzb2NpYXRlZCB3aXRoIGdyZWF0ZXIgY2VydGFpbnR5IGluIGV4cGVyaWVuY2UsIGJ1dCBjYXVzaW5nIGlzIGEgc3Ryb25nZXIgZWZmZWN0LgoKVXNpbmcgc3RyZW5ndGgvc2ltaWxhcml0eSBpcyBzdHJvbmdlciBlZmZlY3QuCgpgYGB7cn0KbTwtbG1lcihzY2FsZShDZXJ0KSB+ICBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCgptPC1sbWVyKHNjYWxlKENlcnQpIH4gIHNjYWxlKHN0cmVuZ3RoSW4pICsgc2NhbGUoc3RyZW5ndGhPdXQpICsgKCBzY2FsZShzdHJlbmd0aEluKSArIHNjYWxlKHN0cmVuZ3RoT3V0KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMgSDM6IE1lbW9yaWVzIHdpdGggbW9yZSBkZXBlbmRlbnRzIHdpbGwgYmUgbW9yZSBjbGVhcmx5IGRlZmluZWQgYW5kIGFjY2Vzc2libGUuCgpFeHBlcmllbmNlcyBjYXVzaW5nIG1vcmUgZXhwZXJpZW5jZXMgYXJlIG1vcmUgcHJlZGljdGl2ZSBvZiBjbGFyaXR5IHRoYW4gZXhwZXJpZW5jZXMgY2F1c2VkIGJ5IG1vcmUgZXhwZXJpZW5jZXMKCmBgYHtyfQptPC1sbWVyKCBzY2FsZShDbGVhcikgfiAgc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSArIG51bUlEICsgc2NhbGUobGVuZ3RoKSArICggc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQoKbTwtbG1lciggc2NhbGUoQ2xlYXIpIH4gIHNjYWxlKHN0cmVuZ3RoSW4pICsgc2NhbGUoc3RyZW5ndGhPdXQpICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShzdHJlbmd0aEluKSArIHNjYWxlKHN0cmVuZ3RoT3V0KSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMgSDU6IE1lbW9yaWVzIHdpdGggbW9yZSBkZXBlbmRlbnRzIHdpbGwgYmUgbW9yZSBmdW5kYW1lbnRhbCB0byBob3cgcGVvcGxlIHNlZSB0aGVtc2VsdmVzLCBhbmQgaWYgdGhleSB3ZXJlIGNoYW5nZWQsIHdvdWxkIGNoYW5nZSB0aGUgcGVyc29uLgoKVGhlIG51bWJlciBvZiBhbiBleHBlcmllbmNlcyBvZiBjYXVzZXMsIGJ1dCBub3Qgd2hhdCBpdCBpcyBjYXVzZWQgYnksIHByZWRpY3QgaG93IGZ1bmRhbWVudGFsIGFuIGV4cGVyaWVuY2UgaXMuCgpgYGB7cn0KbTwtbG1lciggc2NhbGUoRnVuZCkgfiAgc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSArIG51bUlEICsgc2NhbGUobGVuZ3RoKSArICggc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQoKbTwtbG1lciggc2NhbGUoRnVuZCkgfiAgc2NhbGUoc3RyZW5ndGhJbikgKyBzY2FsZShzdHJlbmd0aE91dCkgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKHN0cmVuZ3RoSW4pICsgc2NhbGUoc3RyZW5ndGhPdXQpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCmBgYAoKIyMgSW1wb3J0YW50IHByaW5jaXBhbCBmYWN0b3IgKENoYW5nZWQgbWUsIEZ1bmRhbWVudGFsLCBSZXByZXNlbnRhdGl2ZSkKCmBgYHtyfQptPC1sbWVyKHNjYWxlKFBDQWltcCkgfiAgc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSArIG51bUlEICsgc2NhbGUobGVuZ3RoKSArICggc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQoKbTwtbG1lcihzY2FsZShQQ0FpbXApIH4gIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMgSDY6IE1lbW9yaWVzIHdpdGggbW9yZSBkZXBlbmRlbnRzIHdpbGwgYmUgbW9yZSBpbXBvcnRhbnQgdG8gdGhlIHBlcnNvbi4KCiMjIFRvIFNlbGYKCkV4cGVyaWVuY2VzIHRoYXQgY2F1c2UgbW9yZSBleHBlcmllbmNlcyBhcmUgcGVyY2VpdmVkIGFzIGltcG9ydGFudCB0byBzZWxmLCBidXQgbm90IGV4cGVyaWVuY2VzIHRoYXQgYXJlIGNhdXNlZCBieSBtb3JlIGV4cGVyaWVuY2VzLgoKYGBge3J9Cm08LWxtZXIoIHNjYWxlKElNKSB+ICBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCgptPC1sbWVyKCBzY2FsZShJTSkgfiAgc2NhbGUoc3RyZW5ndGhPdXQpICsgc2NhbGUoc3RyZW5ndGhJbikgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCmBgYAoKIyMgVG8gT3RoZXJzCgpFeHBlcmllbmNlcyB0aGF0IGNhdXNlIG1vcmUgZXhwZXJpZW5jZXMgYXJlIHBlcmNlaXZlZCBhcyBpbXBvcnRhbnQgdG8gb3RoZXJzLCBidXQgbm90IGV4cGVyaWVuY2VzIHRoYXQgYXJlIGNhdXNlZCBieSBtb3JlIGV4cGVyaWVuY2VzLgoKYGBge3J9Cm08LWxtZXIoIHNjYWxlKElPKSB+ICBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCgptPC1sbWVyKCBzY2FsZShJTykgfiAgc2NhbGUoc3RyZW5ndGhPdXQpICsgc2NhbGUoc3RyZW5ndGhJbikgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCmBgYAoKIyBNb3JlIEltcG9ydGFudCB0byBTZWxmIHRoYW4gT3RoZXJzCgpObyBldmlkZW5jZQoKYGBge3J9CmZ1bGxEYXRhJEltcERpZmYgPC0gKGZ1bGxEYXRhJElNLWZ1bGxEYXRhJElPKQptPC1sbWVyKCBzY2FsZShJbXBEaWZmKSB+ICBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSArIG51bUlEICsgc2NhbGUobGVuZ3RoKSArICggc2NhbGUoc3RyZW5ndGhPdXQpICsgc2NhbGUoc3RyZW5ndGhJbikgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoIHNjYWxlKEltcERpZmYpIH4gIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKYGBgCgojIEgxMTogUGVvcGxlIHRoaW5rIG1vcmUgb2Z0ZW4gYWJvdXQgbWVtb3JpZXMgd2l0aCBtb3JlIG1lbW9yaWVzIGNhdXNpbmcgdGhlbS4KCkV4cGVyaWVuY2VzIHdpdGggbW9yZSBjYXVzZXMgYW5kIGNhdXNlZCBieSBtb3JlIGFyZSByZWZsZWN0ZWQgb24gbW9yZSBmcmVxdWVudGx5LiBQZXJoYXBzIHNvbWUgc3Ryb25nZXIgZWZmZWN0cyBmb3IgY2F1c2luZyBtb3JlLgoKYGBge3J9Cm08LWxtZXIoIHNjYWxlKE9mdGVuKSB+ICBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCgptPC1sbWVyKCBzY2FsZShPZnRlbikgfiAgc2NhbGUoc3RyZW5ndGhPdXQpICsgc2NhbGUoc3RyZW5ndGhJbikgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCmBgYAoKIyBIMTI6IFRoZSBtb3JlIG1lbW9yaWVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4gbWVtb3J5LCB0aGUgbW9yZSBwZW9wbGUgYmVsaWV2ZSAiVGhpcyBtZW1vcnkgY2hhbmdlZCBtZSIuIFdlYWtlciBlZmZlY3QgZm9yIG1lbW9yaWVzIHdpdGggbWFueSBjYXVzZXMgb2YgaXQuCgpgYGB7cn0KbTwtbG1lciggc2NhbGUoQ2hhbikgfiAgc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSArIG51bUlEICsgc2NhbGUobGVuZ3RoKSArICggc2NhbGUob3V0ZGVncmVlKSArIHNjYWxlKGluZGVncmVlKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQoKbTwtbG1lciggc2NhbGUoQ2hhbikgfiAgc2NhbGUoc3RyZW5ndGhPdXQpICsgc2NhbGUoc3RyZW5ndGhJbikgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCmBgYAoKIyBIMTM6IFRoZSBtb3JlIG1lbW9yaWVzIHRoYXQgZGVwZW5kIG9uIGEgZ2l2ZW4gbWVtb3J5LCB0aGUgbW9yZSBjZXJ0YWluIHRoYXQgcGVvcGxlIGZlZWwgdGhpcyBleHBlcmllbmNlIGlzIHJlcHJlc2VudGF0aXZlIG9mIHdobyB0aGV5IGFyZS4KClBlb3BsZSBmZWVsIGV4cGVyaWVuY2VzIHdpdGggbW9yZSBjYXVzZXMgYXJlIG1vcmUgcmVwcmVzZW50YXRpdmUuIFNpbWlsYXIsIGJ1dCB3ZWFrZXIsIGVmZmVjdCBmb3IgZXhwZXJpZW5jZXMgY2F1c2VkIGJ5IG1vcmUgZXhwZXJpZW5jZXMuCgpgYGB7cn0KbTwtbG1lciggc2NhbGUoUmVwKSB+ICBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShvdXRkZWdyZWUpICsgc2NhbGUoaW5kZWdyZWUpIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCgptPC1sbWVyKCBzY2FsZShSZXApIH4gIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMgRXhwbG9yYXRvcnkgQW5hbHlzZXMKCiMjIFNlbnRpbWVudCBvZiBtZW1vcnkgZGVzY3JpcHRpb24gd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggZGVwZW5kZW5jaWVzCgojIyMgQ29tYmluZWQKCkV4cGVyaWVuY2VzIGNhdXNlZCBieSBtb3JlIGV4cGVyaWVuY2VzIGhhdmUgbW9yZSBxdWFsaXRhdGl2ZSBwb3NpdGl2ZSBzZW50aW1lbnQuCgpgYGB7cn0KbTwtbG1lciggc2NhbGUodmFkX2NvbXApIH4gIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoIHNjYWxlKHZhZF9jb21wKSB+ICBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSArIG51bUlEICsgc2NhbGUobGVuZ3RoKSArICggc2NhbGUoc3RyZW5ndGhPdXQpICsgc2NhbGUoc3RyZW5ndGhJbikgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKYGBgCgojIyMgUG9zaXRpdmUKCkV4cGVyaWVuY2VzIHdpdGggbW9yZSBleHBlcmllbmNlcyBjYXVzaW5nIHRoZW0gYXJlIHF1YWxpdGF0aXZlbHkgbW9yZSBwb3NpdGl2ZQoKYGBge3J9Cm08LWxtZXIoIHNjYWxlKHZhZF9wb3MpIH4gIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoIHNjYWxlKHZhZF9wb3MpIH4gIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMjIyBOZWdhdGl2ZQoKTm8gbmVnYXRpdmUgZWZmZWN0cwoKYGBge3J9Cm08LWxtZXIoIHNjYWxlKHZhZF9uZWcpIH4gIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoIHNjYWxlKHZhZF9uZWcpIH4gIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMjIE51bWJlciBvZiB3b3JkcwoKTm8gZWZmZWN0IG9mIGNhdXNlcyBvciBjYXVzZWQgYnkgb24gbnVtYmVyIG9mIHdvcmRzCgpgYGB7cn0KbTwtZ2xtZXIobndvcmRzIH4gIG91dGRlZ3JlZSArIGluZGVncmVlICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBvdXRkZWdyZWUgKyBpbmRlZ3JlZSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSwgZmFtaWx5PSJwb2lzc29uIikKc3VtbWFyeShtKQpnZ3ByZWRpY3QobSwgdGVybXMgPSBjKCJWYWxfMSIsIlZhbF8yIikpICU+JSBwbG90KCkKYGBgCgojIyBCcmVhZHRoCgpFeHBlcmllbmNlcyB3aXRoIG1vcmUgY2F1c2VzIGFyZSBtb3JlIGJyb2FkLgoKYGBge3J9Cm08LWxtZXIoIHNjYWxlKEJyZWFkdGgpIH4gIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoIHNjYWxlKEJyZWFkdGgpIH4gIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMjIERpc3RpbmN0bmVzcwoKRXhwZXJpZW5jZXMgd2l0aCBtb3JlIGNhdXNlcyBhcmUgcGVyY2VpdmVkIGFzIG1vcmUgZGlzdGluY3QvZGlmZmVyZW50LgoKYGBge3J9Cm08LWxtZXIoIHNjYWxlKERpc3QpIH4gIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgKyBudW1JRCArIHNjYWxlKGxlbmd0aCkgKyAoIHNjYWxlKG91dGRlZ3JlZSkgKyBzY2FsZShpbmRlZ3JlZSkgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoIHNjYWxlKERpc3QpIH4gIHNjYWxlKHN0cmVuZ3RoT3V0KSArIHNjYWxlKHN0cmVuZ3RoSW4pICsgbnVtSUQgKyBzY2FsZShsZW5ndGgpICsgKCBzY2FsZShzdHJlbmd0aE91dCkgKyBzY2FsZShzdHJlbmd0aEluKSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQpgYGAKCiMjIERvIHBlb3BsZSBoaWdoZXIgaW4gc2VsZi1lc3RlZW0gaGF2ZSBtb3JlIHNlbGYgdGhhbiBvdGhlciBmb2N1c2VkIG1lbW9yaWVzPwoKYGBge3J9CmZ1bGxEYXRhJFNtaW5PIDwtIGZ1bGxEYXRhJFNPXzEgLSBmdWxsRGF0YSRTT18yCgptPC1sbWVyKCBTbWluTyB+IFNFICsgKCAxIHwgc3ViSUQpLCBkYXRhPWZ1bGxEYXRhKQpzdW1tYXJ5KG0pCmBgYAoKIyMgUGFnZSBSYW5rLCBIdWIgYW5kIENoYW5nZWFiaWxpdHkKCmBgYHtyfQptPC1sbWVyKENoYW4gfiAgcGFnZSArICggcGFnZSB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQoKbTwtbG1lcihDaGFuIH4gIHBhZ2VXICsgKCBwYWdlVyB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQoKbTwtbG1lcihDaGFuIH4gIHBhZ2VPdXQgKyAoIHBhZ2VPdXQgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoQ2hhbiB+ICBwYWdlT3V0VyArICggcGFnZU91dFcgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKCm08LWxtZXIoQ2hhbiB+ICBodWIgKyAoIGh1YiB8IHN1YklEKSwgZGF0YT1mdWxsRGF0YSkKc3VtbWFyeShtKQoKbTwtbG1lcihDaGFuIH4gIGh1YlcgKyAoIGh1YlcgfCBzdWJJRCksIGRhdGE9ZnVsbERhdGEpCnN1bW1hcnkobSkKYGBgCgpgYGB7cn0KZnVsbFNob3J0IDwtIGRvLmNhbGwoZGF0YS5mcmFtZSwgICAgICAgICAgICAgICAgICAgICAgIyBSZXBsYWNlIEluZiBpbiBkYXRhIGJ5IE5BCiAgICAgICAgICAgICAgICAgICBsYXBwbHkoZnVsbFNob3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHgpIHJlcGxhY2UoeCwgaXMuaW5maW5pdGUoeCksIE5BKSkpCmNvck1hdCA8LSBmdWxsU2hvcnQgJT4lIHNlbGVjdChlZGdlVG90Ok5GQykgJT4lIGNvcihmdWxsU2hvcnQsdXNlPSJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQoKb3V0cGhtIDwtIHBoZWF0bWFwKGNvck1hdCwgZm9udHNpemVfcm93ID0gNiwgZm9udHNpemVfY29sID0gNiwgYW5nbGVfY29sID0gNDUsIGFuZ2xlX3JvdyA9NDUsIHdpZHRoPTEwMCwgaGVpZ2h0ID0gMjAwICkKCmhlYXRtYXBseV9jb3Iocm91bmQoY29yTWF0LDMpLCBSb3d2PW91dHBobVtbMV1dLCBDb2x2PW91dHBobVtbMl1dLCByZXZDPVRSVUUsIGZvbnRzaXplX3JvdyA9IDIuNSwgZm9udHNpemVfY29sID0gMi41LCBhbmdsZV9jb2wgPSA0NSwgYW5nbGVfcm93ID00NSwgIGxpbWl0cyA9IGMoLTEsIDEpLCBjb2xvcnMgPSBjb2xvclJhbXBQYWxldHRlKHJldihicmV3ZXIucGFsKG4gPSA3LCBuYW1lID0KICAiUmRZbEJ1IikpKSgxMDApICkKYGBgCgpgYGB7cn0KZnVsbFNob3J0ICU+JSBzZWxlY3QodmFkX2NvbXBBZywgTUFJQTpORkMpICU+JSBjb3JUb09uZSguLCAidmFkX2NvbXBBZyIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KHZhZF9jb21wQWcsIE1BSUE6TkZDKSAlPiUgcGxvdENvclRvT25lKC4sICJ2YWRfY29tcEFnIikKYGBgCgoKYGBge3J9CmZ1bGxTaG9ydCAlPiUgc2VsZWN0KGVkZ2VUb3QsIE1BSUE6TkZDKSAlPiUgY29yVG9PbmUoLiwgImVkZ2VUb3QiKQpmdWxsU2hvcnQgJT4lIHNlbGVjdChlZGdlVG90LCBNQUlBOk5GQykgJT4lIHBsb3RDb3JUb09uZSguLCAiZWRnZVRvdCIpCmBgYAoKYGBge3J9CmZ1bGxTaG9ydCAlPiUgc2VsZWN0KG51bUlELCBNQUlBOk5GQykgJT4lIGNvclRvT25lKC4sICJudW1JRCIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KG51bUlELCBNQUlBOk5GQykgJT4lIHBsb3RDb3JUb09uZSguLCAibnVtSUQiKQpgYGAKCmBgYHtyfQpmdWxsU2hvcnQgJT4lIHNlbGVjdChkZW5zZSwgTUFJQTpORkMpICU+JSBjb3JUb09uZSguLCAiZGVuc2UiKQpmdWxsU2hvcnQgJT4lIHNlbGVjdChkZW5zZSwgTUFJQTpORkMpICU+JSBwbG90Q29yVG9PbmUoLiwgImRlbnNlIikKYGBgCgpgYGB7cn0KZnVsbFNob3J0ICU+JSBzZWxlY3QoYXZlRGlzdCwgTUFJQTpORkMpICU+JSBjb3JUb09uZSguLCAiYXZlRGlzdCIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KGF2ZURpc3QsIE1BSUE6TkZDKSAlPiUgcGxvdENvclRvT25lKC4sICJhdmVEaXN0IikKYGBgCgpgYGB7cn0KZnVsbFNob3J0ICU+JSBzZWxlY3QoVmFsXzFfSG9tb3BoLCBNQUlBOk5GQykgJT4lIGNvclRvT25lKC4sICJWYWxfMV9Ib21vcGgiKQpmdWxsU2hvcnQgJT4lIHNlbGVjdChWYWxfMV9Ib21vcGgsIE1BSUE6TkZDKSAlPiUgcGxvdENvclRvT25lKC4sICJWYWxfMV9Ib21vcGgiKQpgYGAKCmBgYHtyfQpmdWxsU2hvcnQgJT4lIHNlbGVjdChWYWxfMl9Ib21vcGgsIE1BSUE6TkZDKSAlPiUgY29yVG9PbmUoLiwgIlZhbF8yX0hvbW9waCIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KFZhbF8yX0hvbW9waCwgTUFJQTpORkMpICU+JSBwbG90Q29yVG9PbmUoLiwgIlZhbF8yX0hvbW9waCIpCmBgYAoKYGBge3J9CmZ1bGxTaG9ydCAlPiUgc2VsZWN0KEZ1bmRfSG9tb3BoLCBNQUlBOk5GQykgJT4lIGNvclRvT25lKC4sICJGdW5kX0hvbW9waCIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KEZ1bmRfSG9tb3BoLCBNQUlBOk5GQykgJT4lIHBsb3RDb3JUb09uZSguLCAiRnVuZF9Ib21vcGgiKQpgYGAKCmBgYHtyfQpmdWxsU2hvcnQgJT4lIHNlbGVjdChSZXBfSG9tb3BoLCBNQUlBOk5GQykgJT4lIGNvclRvT25lKC4sICJSZXBfSG9tb3BoIikKZnVsbFNob3J0ICU+JSBzZWxlY3QoUmVwX0hvbW9waCwgTUFJQTpORkMpICU+JSBwbG90Q29yVG9PbmUoLiwgIlJlcF9Ib21vcGgiKQpgYGAKCmBgYHtyfQpmdWxsU2hvcnQgJT4lIHNlbGVjdChDaGFuX0hvbW9waCwgTUFJQTpORkMpICU+JSBjb3JUb09uZSguLCAiQ2hhbl9Ib21vcGgiKQpmdWxsU2hvcnQgJT4lIHNlbGVjdChDaGFuX0hvbW9waCwgTUFJQTpORkMpICU+JSBwbG90Q29yVG9PbmUoLiwgIkNoYW5fSG9tb3BoIikKYGBgCgpgYGB7cn0KZnVsbFNob3J0ICU+JSBzZWxlY3QocmVjaXAsIE1BSUE6TkZDKSAlPiUgY29yVG9PbmUoLiwgInJlY2lwIikKZnVsbFNob3J0ICU+JSBzZWxlY3QocmVjaXAsIE1BSUE6TkZDKSAlPiUgcGxvdENvclRvT25lKC4sICJyZWNpcCIpCmBgYAoKIyBDb2hlc2l2ZQoKYGBge3J9CmZ1bGxTaG9ydCAlPiUgc2VsZWN0KGNvaGVzLCBNQUlBOk5GQykgJT4lIGNvclRvT25lKC4sICJjb2hlcyIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KGNvaGVzLCBNQUlBOk5GQykgJT4lIHBsb3RDb3JUb09uZSguLCAiY29oZXMiKQpgYGAKCmBgYHtyfQpmdWxsU2hvcnQgJT4lIHNlbGVjdChtb2R1bGFyLCBNQUlBOk5GQykgJT4lIGNvclRvT25lKC4sICJtb2R1bGFyIikKZnVsbFNob3J0ICU+JSBzZWxlY3QobW9kdWxhciwgTUFJQTpORkMpICU+JSBwbG90Q29yVG9PbmUoLiwgIm1vZHVsYXIiKQpgYGAKCgojIFJlY2lwcm9jaXR5CgpgYGB7cn0KZnVsbFNob3J0ICU+JSBzZWxlY3QocmVjaXAsIE1BSUE6TkZDKSAlPiUgY29yVG9PbmUoLiwgInJlY2lwIikKZnVsbFNob3J0ICU+JSBzZWxlY3QocmVjaXAsIE1BSUE6TkZDKSAlPiUgcGxvdENvclRvT25lKC4sICJyZWNpcCIpCmBgYAoKIyBTdGFuZGFyZCBEZXZpYXRpb24gb2YgRGVncmVlcwoKYGBge3J9CmZ1bGxTaG9ydCAlPiUgc2VsZWN0KHNkRGVnLCBNQUlBOk5GQykgJT4lIGNvclRvT25lKC4sICJzZERlZyIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KHNkRGVnLCBNQUlBOk5GQykgJT4lIHBsb3RDb3JUb09uZSguLCAic2REZWciKQpgYGAKCmBgYHtyfQpmdWxsU2hvcnQgJT4lIHNlbGVjdChzZERlZ1csIE1BSUE6TkZDKSAlPiUgY29yVG9PbmUoLiwgInNkRGVnVyIpCmZ1bGxTaG9ydCAlPiUgc2VsZWN0KHNkRGVnVywgTUFJQTpORkMpICU+JSBwbG90Q29yVG9PbmUoLiwgInNkRGVnVyIpCmBgYAoKCgoKCgo=